package com.bilibili.juc;

import java.util.concurrent.*;
import java.util.stream.IntStream;

/**
 * @author 小泽
 * @create 2022-09-19  9:17
 * 记得每天敲代码哦
 */
public class CompletableFutureHighUser {
    public static void main(String[] args) {
         // ThreadLocalRandom.current().ints( 1,6).forEach(System.out::println);
        ExecutorService threadPool = Executors.newFixedThreadPool(3);
        CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName() + "--------副线程come in");
            int result = ThreadLocalRandom.current().nextInt(10);//产生随机数
            try {
                TimeUnit.SECONDS.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("-----结果---异常判断值---" + result);
            //---------------------异常情况的演示--------------------------------------
            // if (result > 2) {
            //     int i = 10 / 0;//我们主动的给一个异常情况
            // }
            //------------------------------------------------------------------
            return result;
        }, threadPool).whenComplete((v, e) -> {//没有异常,v是值，e是异常
            if (e == null) {
                System.out.println("------------------计算完成，更新系统updataValue" + v);
            }
        }).exceptionally(e -> {//有异常的情况
            e.printStackTrace();
            System.out.println("异常情况" + e.getCause() + "\t" + e.getMessage());
            return null;
        });

        //线程不要立刻结束，否则CompletableFuture默认使用的线程池会立刻关闭：暂停3秒钟线程
        System.out.println(Thread.currentThread().getName() + "线程先去忙其他任务");
        // try {
        //     TimeUnit.SECONDS.sleep(3);
        // } catch (InterruptedException e) {
        //     e.printStackTrace();
        // }
        threadPool.shutdown();
    }
}
